- 省级水平FLASH课件制作培训,网络教学,解答所有学员疑难,包教包会。
- 教程发放到学员手中,共分为初级,中级,高级三部分,全部视频教程,跟真人在身边教学效果一样。
- 有意者直接咨询我站管理QQ:444860709 也可以加入到QQ群(67042004)中后,直接找群主咨询相关事宜培训详情。
注意:以下均为本站原创flash教程,属于本站产品,欢迎选学,如有问题可直接与我站管理联系解答事宜。QQ:4444860709
题 目:AS代码的动态遮罩来实现液化效果
一、效果预览
二、教程内容
AS代码的动态遮罩来实现液化效果
效果:将鼠标在图片上移动看看效果。
制作方法:
1. 新建Flash文档,属性保持默认即可。将帧频调到31.
2. 新建一影片剪辑,拖入一张美女图。然后回到主场景,将该MC放到舞台上,居中对齐。打开属性面板实例名称设为:pic_mc.
3. 新建一影片剪辑,用椭圆工具画一个无笔触任一填充的圆,这个园应该覆盖图片的大部分。回到主场景,新建一层,将库中的圆元件拖上舞台。打开属性面板,实例名称为:mask_mc.将这一层拖到图片层的下面。
4. 新建一个图层,取名为action,输入下列代码:
this.createEmptyMovieClip("theScene", this.getNextHighestDepth());
//flash课件吧(湖北金鹰)WWW.luotao2008.cn
var maxImages:Number = 20;
dupeAndPlace = function (image:MovieClip):Object {
var arrHolder:Object = new Object();
arrHolder.pics_arr = new Array(0);
arrHolder.masks_arr = new Array(0);
for (var i = 1; i<maxImages; i++) {
var dnm = "image"+i;
var mnm = "mask"+i;
var imgObj = {_x:image._x, _y:image._y, _xscale:100+(i*1.7), _yscale:100+(i*1.7)};
var maskObj = {_xscale:Math.floor(100/i+3), _yscale:Math.floor(100/i+3), _x:this._xmouse, _y:this._ymouse};
var theDupedIm);
arrHolder.pics_arr.push(theDupedImage);
arrHolder.masks_arr.push(theDupedMask);
}
mask_mc._visible = false;
return arrHolder;
};
//flash课件吧(湖北金鹰)WWW.luotao2008.cn
makeWaves = function (masks_arr:Array) {
for (var i = masks_arr.length; i>0; i--) {
masks_arr[i]._x += (this._xmouse-masks_arr[i]._x)/maxImages*i;
masks_arr[i]._y += (this._ymouse-masks_arr[i]._y)/maxImages*i;
}
};
//flash课件吧(湖北金鹰)WWW.luotao2008.cn
this.liquefyImage = function(theImage:MovieClip) {
var = function () {
makeWaves(arrHolder.masks_arr);
};
};
pic_mc.onRollOver = function() {
liquefyImage(pic_mc);
};
好了,可以测试影片了。
代码分析:
看到这个效果我们很可能想到虑镜,其实不然,这就是用遮罩实现的效果。原理并不复杂。若干个随鼠标运动的园型遮罩,下面也是若干个被遮罩的图片,遮罩和被遮罩大小都不断变化,从而实现了这个效果。
首先创建了一个空的MC,然后预设了一个数量,上面我们说到若干个,这里设为20。
this.createEmptyMovieClip("theScene", this.getNextHighestDepth());
var maxImages:Number = 20;
接下创建一个函数用来创建这些若干个遮照和图片。
dupeAndPlace = function (image:MovieClip):Object {
创建一个对象用来存放这些遮罩和图片。
var arrHolder:Object = new Object();
接下来创建两个数组一个用来存放图片,一个用来存放遮罩:
arrHolder.pics_arr = new Array(0);
arrHolder.masks_arr = new Array(0);
接下来用一个for循环来创建这些图片和遮罩:
for (var i = 1; i<maxImages; i++) {
用两个变量来代表图片和遮罩,这样一个循环下来,就产生了20个图片和遮罩,当然这时还没创建,只是产生了20个名称而已:
var dnm = "image" + i;
var mnm = "mask" + i;
接下来再创建两个对象,用来存放将要产生的遮罩和图片的属性:
var imgObj = {_x:image._x, _y:image._y, _xscale:100+(i*1.7), _yscale:100+(i*1.7)};
var maskObj = {_xscale:Math.floor(100/i+3), _yscale:Math.floor(100/i+3), _x:this._xmouse, _y:this._ymouse};
下面创建两个对象分别复制图片和遮罩,并将上面两个对象中存的属性赋给它们。
var theDupedImage = image.duplicateMovieClip(dnm, theScene.getDepth()+ i, imgObj);
var theDupedMask = mask_mc.duplicateMovieClip(mnm, theScene.getDepth()+(i*50), maskObj);
然后将遮罩应用于图片上:
theDupedImage.setMask(theDupedMask);
然后将遮罩和图片存到上面创建的数组中。
arrHolder.pics_arr.push(theDupedImage);
arrHolder.masks_arr.push(theDupedMask);
将舞台上的mask_mc元件隐藏。
mask_mc._visible = false;
返回存放这些遮罩和图片的对象:
return arrHolder;
上面这些动作都是在for循环中,因此,到现在就已创建了20对大小不一遮罩和图片,并且都被设置了遮罩和被遮罩的关系。
下面创建一个函数使这些遮罩向鼠标靠近:
makeWaves = function (masks_arr:Array) {
for (var i = masks_arr.length; i>0; i--) {
masks_arr._x += (this._xmouse-masks_arr._x)/maxImages*i;
masks_arr._y += (this._ymouse-masks_arr._y)/maxImages*i;
}
};
创建一个函数用来执行上面创建的创建这些遮罩和图片的函数,并在每隔一帧时调用一次让遮罩靠近鼠标的函数:
this.liquefyImage = function(theImage:MovieClip){
var arrHolder:Object = dupeAndPlace(theImage);
onEnterFrame = function(){
makeWaves(arrHolder.masks_arr);
}
}
下面是当鼠标移过图片时调用上面这个函数:
pic_mc.onRollOver = function(){
liquefyImage(pic_mc);
}
我站网络视频网校培训开始招生了!FLASH课件制作视频教程教学,QQ一对一解答所有学员疑问。咨询:QQ444860709 查看培训详情。
|